package com.tanhua.server.service;

import com.tanhua.dubbo.api.db.OptionsApi;
import com.tanhua.dubbo.api.db.QuestionnairesApi;
import com.tanhua.dubbo.api.db.QuestionsApi;
import com.tanhua.dubbo.api.db.UserInfoApi;
import com.tanhua.model.db.*;
import com.tanhua.model.vo.OptionsVo;
import com.tanhua.model.vo.QuestionnairesVo;
import com.tanhua.model.vo.QuestionsVo;
import com.tanhua.server.interceptor.UserHolder;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 测灵魂业务处理层
 */
@Service
public class TestSoulService {
    @DubboReference
    private QuestionnairesApi questionnairesApi;

    @DubboReference
    private UserInfoApi userInfoApi;

    @DubboReference
    private QuestionsApi questionsApi;

    @DubboReference
    private OptionsApi optionsApi;

    /**
     * 获取问卷列表，返回对应Vo
     * @return
     */
    public List<QuestionnairesVo> testSoul() {
        Long userId = UserHolder.getUserId();
        //1.调用服务查询questionnaires获取所有问卷对象的集合
        //记得在UserInfo加LevelStatus字段
        List<Questionnaires> questionnairesList = questionnairesApi.getAllQuestionnaires();


        //3.构建Vo,存入问卷Vo集合
        List<QuestionnairesVo> questionnairesVoList = new ArrayList<>();
        for (Questionnaires questionnaires : questionnairesList) {
            //根据问卷id获取对应的问题数组
            //构建questionsVo问题Vo
            List<Questions>  questionsList = questionsApi.findQuestionsByQaId(questionnaires.getId());
            List<QuestionsVo> questionsVoList = new ArrayList<>();
            for (Questions questions : questionsList) {
                QuestionsVo questionsVo = new QuestionsVo();
                questionsVo.setId(questions.getQuestionsId());
                questionsVo.setQuestion(questions.getQuestion());
                //构造OptionsVo存入
                List<Options> options = optionsApi.findOptionsByQuId(questions.getQuestionsId());
                List<OptionsVo> optionsVoList = new ArrayList<>();
                for (Options option : options) {
                    OptionsVo optionsVo = new OptionsVo();
                    optionsVo.setId(option.getOptionsId());
                    optionsVo.setOption(option.getOptiontext());
                    optionsVoList.add(optionsVo);
                }
                questionsVo.setOptions(optionsVoList);
                questionsVoList.add(questionsVo);
            }

            //构建问卷questionnairesVo
            QuestionnairesVo questionnairesVo = new QuestionnairesVo();
            questionnairesVo.setId(questionnaires.getId());
            questionnairesVo.setName(questionnaires.getName());
            questionnairesVo.setCover(questionnaires.getCover());
            questionnairesVo.setLevel(questionnaires.getLevel());
            questionnairesVo.setStar(questionnaires.getStar());

            questionnairesVo.setQuestions(questionsVoList);
            questionnairesVo.setIsLock(JudgeIsLock(userId, questionnaires));

//            if(userInfoApi.getUserInfo(userId).get(reportId)!=null){
//             questionnairesVo.setReportId("reportId");
//            }
            questionnairesVoList.add(questionnairesVo);
        }

        for (QuestionnairesVo questionnairesVo : questionnairesVoList) {
            for (QuestionsVo questionsVo : questionnairesVo.getQuestions()) {
                for (OptionsVo optionvo : questionsVo.getOptions()) {
                    System.out.println(optionvo.getOption());
                }
            }
        }
        //4.返回Volist集合
        return questionnairesVoList;

    }

    /**
     * 判断isLock
     * @param userId
     * @param questionnaires
     * @return
     */
    private int JudgeIsLock(Long userId, Questionnaires questionnaires){
        if("1".equals(userInfoApi.getUserInfo(userId).getLevelstatus()) && "初级".equals(questionnaires.getLevel())){
            return 0;
        }
        if("2".equals(userInfoApi.getUserInfo(userId).getLevelstatus())  && ("初级".equals(questionnaires.getLevel()) || "中级".equals(questionnaires.getLevel()))){
            return 0;
        }
        if("3".equals(userInfoApi.getUserInfo(userId).getLevelstatus())){
            return 0;
        }
        return 1;
    }

}